/*
--------------不是这样----------deque并不是真正连续的空间，而是由许多连续的小空间拼接而成的。

支持快速首位插入删除。快速查找。
动态扩容：当 push_back 时如果空间不足，VecDeque 会像 Vec 一样扩容（通常容量翻倍）。
不会自动缩容：pop_front 不会自动释放底层内存，只是移动头部指针（逻辑删除）。
例如：容量为 8 的 VecDeque 在 pop_front 后，即使队列为空，容量仍为 8。
环形缓冲区优化：
VecDeque 通过维护 head 和 tail 指针实现环形缓冲区，避免频繁内存移动。当 push_back 和 pop_front 交替进行时，可能复用已释放的空间，而不会触发扩容。
?????
???????个人判断，VecDeque是连续空间，环形设计，超出长度后，新分配连续空间，然后拷贝过去。
?????
?????仅队列功能，还是没有List好吧，队列而言。多余内存不会被释放。
*/
use std::collections::VecDeque;
fn main() {
    {
        let mut tmpdeq : VecDeque<i32> = VecDeque::new();
        // capacity:4-8-16-32-64-128-256-512
        for i in 0..130 {
            tmpdeq.push_back(i);
            // println!("[{},{}]{},{}", file!(), line!(), tmpdeq.len(), tmpdeq.capacity());
        }
        // 256
        println!("[{},{}]{},{}", file!(), line!(), tmpdeq.len(), tmpdeq.capacity());
        // capacity not change!!!!
        for _ in 0..100 {
            tmpdeq.pop_front();
            // println!("[{},{}]{},{}", file!(), line!(), tmpdeq.len(), tmpdeq.capacity());
        }
        // 256
        println!("[{},{}]{},{}", file!(), line!(), tmpdeq.len(), tmpdeq.capacity());
        for i in 0..200 {
            tmpdeq.push_back(i);
            // println!("[{},{}]{},{}", file!(), line!(), tmpdeq.len(), tmpdeq.capacity());
        }
        // 256
        println!("[{},{}]{},{}", file!(), line!(), tmpdeq.len(), tmpdeq.capacity());
    }
    {
    }
}
